package javawdw.io.simple;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

import javawdw.io.BinaryReader;

/**
 * 二进制读入器
 * 
 * @author David
 * 
 */
public class BufferedBinaryReader implements BinaryReader {
	private InputStream reader;

	/**
	 * 根据给定文件创建读入器
	 * 
	 * @param fileUrl
	 *            给定的文件URL
	 */
	public BufferedBinaryReader(InputStream inputStream) {
		this.reader = new BufferedInputStream(inputStream);
	}

	/**
	 * 读入一个字节数组
	 * 
	 * @param buf
	 *            读入内容存放的数组
	 * @return 若为false，说明已到文件结束位置,否则还可再读
	 */
	public int read(byte[] buf) {
		try {
			return reader.read(buf);
		} catch (IOException e) {
			e.printStackTrace();
			return -1;
		}
	}

	/**
	 * 获得文件的最大估计字节数
	 * 
	 * @return 返回最大估计字节数
	 */
	public int available() {
		try {
			return reader.available();
		} catch (IOException e) {
			e.printStackTrace();
			return 0;
		}
	}

	/**
	 * 把读入器指针指向标记位置
	 */
	public void reset() {
		try {
			reader.reset();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 标记当前位置并限制读入字符的长度
	 * 
	 * @param readLimit
	 *            读入内容的长度限制
	 */
	public void mark(int readLimit) {
		reader.mark(readLimit);
	}

	/**
	 * 关闭读入器
	 */
	public void close() {
		try {
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}